﻿#define _CRT_SECURE_NO_WARNINGS 1

//#include <stdio.h>
//
//int main()
//{
//	int val = 20;
//	int arr[10] = { 0 };
//	return 0;
//}

//malloc的使用
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//
//int main()
//{
//	int* p = (int*)malloc(10 * sizeof(int));
//	//判断是否为NULL指针
//	if (p == NULL)
//	{
//		perror("malloc fail\n");
//		return 1;
//
//	}
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		*(p + i) = i;
//		/**p = i;
//		p++;*/
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//	free(p);
//	p = NULL;
//
//	return 0;
//}

//calloc的使用
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//
//int main()
//{
//	int* p = (int*)calloc(10 ,sizeof(int));
//	//判断是否为NULL指针
//	if (p == NULL)
//	{
//		perror("malloc fail\n");
//		return 1;
//	}
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//	return 0;
//}

//relloc的使用
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//
//int main()
//{
//	int* p = (int*)malloc(10 * sizeof(int));
//	//判断是否为NULL指针
//	if (p == NULL)
//	{
//		perror("malloc fail\n");
//		return 1;
//	}
//	int* tmp = (int*)realloc(p, 10*sizeof(int));
//	if (tmp != NULL)
//	{
//		p = tmp;
//	}
//	else
//	{
//		perror("relloc fail\n");
//		return 1;
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}

//1. 解引用NULL指针
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		perror("malloc fail\n");
//		return 1;
//	}
//	*p = 20;
//	free(p);
//	p = NULL;
//	return 0;
//}

//2. 越界访问
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		perror("malloc fail\n");
//		return 1;
//	}
//	int i = 0;
//	for (i = 0; i <= 10; i++)
//	{
//		*(p + i) = i;
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}

// 3. 释放动态开辟的部分空间
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
//	int a = 10;
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		perror("malloc fail\n");
//		return 1;
//	}
//	//使用
//	//......
//	p++;
//	free(p);
//	p = NULL;
//	return 0;
//}


//4. free不是动态开辟的空间
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
//	int a = 10;
//	int* p = &a;
//	free(p);
//	return 0;
//}

//5. 对同⼀块动态内存多次释放
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
//	int a = 10;
//	int* p = (int*)malloc(40);
//	if (p == NULL)
//	{
//		perror("malloc fail\n");
//		return 1;
//	}
//	//使用
//	//......
//	free(p);
//	//p = NULL;
//	free(p);
//	p = NULL;
//	return 0;
//}


#include <stdio.h>
#include <stdlib.h>

void test()
{
	int* p = (int*)malloc(40);
	if (p != NULL)
	{
		*p = 20;
	}
}
int main()
{
	test();
	while (1);
	return 0;
}